%include "macros.mac"
;void crear_lista_huffman(unsigned int *tabla_apariciones , nodo_lista_t **l , nodo_arbol_t **indices_nodos_arboles)
global crear_lista_huffman
extern printf
extern malloc
extern free
extern lista_insertar_ordenado

section .data


section .text

%define offset_a_simbolo 0
%define	offset_a_apariciones 1
%define offset_a_valido 5
%define offset_a_padre 9
%define offset_a_izq 13
%define offset_a_der 17

%define offset_l_nodo 0
%define offset_l_sig 4

%define p_tabla_apariciones [ebp+8]
%define p_l [ebp+12]
%define p_indices_nodos_arboles [ebp+16]
%define nuevo_nodo [ebp-4]

crear_lista_huffman:
	convencion_C 4
	xor ecx,ecx	;seteo en 0 mi contador

_ciclo:

	mov esi,p_tabla_apariciones
	mov esi,[esi+4*ecx]
	cmp esi,0
	je near _no_aparece

_aparece:
	push ecx
	push 8
	call malloc	;en eax tengo nuevo_nodo
	add esp,4
	mov nuevo_nodo,eax	;ahora edx tiene nuevo_nodo
	push 21
	call malloc	;eax tiene a hoja
	add esp,4
	pop ecx
	
  mov [eax+offset_a_simbolo],cl	;hoja->simbolo = simbolo
	mov esi,p_tabla_apariciones
	mov esi,[esi+4*ecx]		
	mov [eax+offset_a_apariciones],esi	;hoja->apariciones = tabla_apariciones[i]
	mov dword [eax+offset_a_valido],1	;hoja->valido = 1
	mov dword [eax+offset_a_izq],0		;hoja->izq = NULL
	mov dword [eax+offset_a_der],0		;hoja->der = NULL
	mov dword [eax+offset_a_padre],0	;hoja->padre = NULL
	mov edx,nuevo_nodo
	mov [edx+offset_l_nodo],eax		;nuevo_nodo->nodo = hoja
	mov dword [edx+offset_l_sig],0		;nuevo_nodo->sig = NULL
	mov ebx,p_indices_nodos_arboles
	;**, tengo q recorrer la lista de punteros y dereferenciar el espacio
	;q necesito para insertar el nodo
	mov [ebx +4*ecx],eax

	push ecx
	push dword nuevo_nodo
	push dword p_l
	call lista_insertar_ordenado
	add esp,8
	pop ecx



_continuar_ciclo:
	inc ecx		;inc el contador
	cmp ecx,256	;si llegue a 256 termino
	jne _ciclo
	jmp _fin



_no_aparece:
	mov ebx,p_indices_nodos_arboles
	mov dword [ebx+4*ecx],0			;nodo_indices_[i]=0
	
;	mov dword [ebx+4*ecx],0		;igual que el de arriba, no se usaaaaa, es viejoooooo

	jmp _continuar_ciclo

_fin:
	convencion_C_fin 4
	ret
